//
// Created by DV on 2024/11/17.
//
//PA0 -->ADC1
//PA9 -->TXD
//GND -->GND
#include <cstdio>

#include "timer.h"
#include "dac.h"
#include "adc.h"
#include "key_adapter.hpp"
#include "usart.h"
#include<app_x-cube-ai.h>
extern UART_HandleTypeDef huart1;
uint8_t rxBuffer[1];
#include<debug.h>
#include<crc.h>
void app_init()
{
    // adc1_init(ADC_CHANNEL_0);
    // timer2_init(FREQ_84M_to_200);
    // usart1_init();
    // HAL_UART_Receive_IT(&huart1, rxBuffer, 1);
    ITM_Init();// ITM调试

    // AI初始化
    MX_CRC_Init();
    MX_X_CUBE_AI_Init();
}

static float temp;
static float out;
void background_handler()
{
    // 测试AI
    temp += 0.3;
    if (temp>=100)
        temp = 0;
    HAL_Delay(100);

    out = ai_process_data(temp);// 进行推理

    printf("in:%3f\tout:%3f\r\n",temp, out);// 显示输入与输出
}

void key_handler()
{
    switch (PlatformKey::getCode())
    {
        case keyK0:

            break;

        case keyK1:

            break;
        default:
            break;
    }
}



/**实现中断服务例程*/
// 用于采集ADC数据
void adc1_isr()
{
    // 获取ADC值
    uint16_t adcValue = get_ADC1_value(ADC_CHANNEL_0);
    // 打印ADC值
    //printf("%f\r\n", (4095-adcValue) / 4095.0f * 3.3 * 5 / 3.3);//方案1：传输给单片机处理 真实电压*电压密度=长度
    //    printf("%d\r\n", adcValue);//方案2：传输给上位机处理
    printf("%f\r\n", adcValue / 4095.0f * 3.3);
}

/*实现串口的接收完成中断回调函数*/
// void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
// {
//     if (huart->Instance == USART1)
//     {
//         // 启动接收中断
//         HAL_UART_Transmit(&huart1, rxBuffer, 1, 100);
//         //重新开始
//         HAL_UART_Receive_IT(&huart1, rxBuffer, 1);
//     }
// }
